﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace UdpServer
{
    public class MessageCenter
    {
        public static MessageCenter Instance;
        static MessageCenter()
        {
            Instance = new MessageCenter();
        }

        MessageCenter()
        {
            Thread t = new Thread(ProcessMsg);
            t.Start();
            Console.WriteLine("消息队列开启");
        }
 
        Queue<TransMsg> oQueue = new Queue<TransMsg>();
        Dictionary<MsgType, Action<TransMsg>> oDic = new Dictionary<MsgType, Action<TransMsg>>();

        public void AddMsg(TransMsg o)
        {
            oQueue.Enqueue(o);
        }

        public void RegisterMethod(TransMsg o,Action<TransMsg> method)
        {//注册方法
            oDic[o.cmd] = method;
        }
        public void ProcessMsg()
        {//每隔一段时间需要取出消息来处理
            while (oQueue.Count != 0)
            {
                //if (oQueue.Count != 0)//while(true)后再这样,消耗比较高
                {//"Copy,C:\aa.txt"    1,对象
                    TransMsg o = oQueue.Dequeue();//取了一次
                    //进行消息分发,不同的命令执行不同的方法
                    if (oDic.ContainsKey(o.cmd))
                    {
                        //dispatcherDic[a]    (b);
                        oDic[o.cmd](o);
                    }
                }

            }
        }
    }
    #region string
    //保存每个命令要调用的方法
    //Dictionary<string, Action<string>> dispatcherDic = new Dictionary<string, Action<string>>();
    //Queue<string> msgQueue = new Queue<string>();
    //public void AddMsg(string msg)
    //{
    //    msgQueue.Enqueue(msg);
    //    //Console.WriteLine(msg);
    //}
    //public void RegisterMethod(string cmd, Action<string> method)
    //{//注册方法
    //    dispatcherDic[cmd] = method;
    //}

    //public void ProcessMsg()
    //{//每隔一段时间需要取出消息来处理
    //    while (true)
    //    {
    //        if (msgQueue.Count != 0)
    //        {//"Copy,C:\aa.txt"     "Chat,张三|李四|你好"
    //            string msg = msgQueue.Dequeue();//取了一次
    //            var split = msg.Split(',');
    //            //进行消息分发,不同的命令执行不同的方法
    //            if (dispatcherDic.ContainsKey(split[0]))
    //            {
    //                //dispatcherDic[a]    (b);
    //                dispatcherDic[split[0]](split[1]);
    //            }
    //        }
    //        //Thread.Sleep(1000);
    //    }
    //}
    #endregion
}
